package pointer

import "fmt"

func Swap(a *int, b *int) {
	*a, *b = *b, *a
}

func PrintPointer() {
	var a int = 1
	var b *int = &a
	var c **int = &b
	var d int = *b
	fmt.Println("查看是否符合要求-----------------------------------")
	fmt.Println("1：", a, *&a, *b, **c, ***&*&c, d)
	fmt.Println("内存a的地址：", &a, b, *&b, *c)
	fmt.Println("内存b的地址：", &b, c, *&c)
	fmt.Println("内存c的地址：", &c)
	fmt.Println("查看地址-----------------------------------")
	fmt.Println("a=", a)             // 1
	fmt.Println("&a=", &a)           // 内存a的地址
	fmt.Println("*&a=", *&a)         // 1
	fmt.Println("b=", b)             // 内存a的地址
	fmt.Println("&b=", &b)           //内存b的地址（内存a地址的地址）
	fmt.Println("*&b=", *&b)         // 内存a的地址
	fmt.Println("*b=", *b)           // 1
	fmt.Println("c=", c)             // 内存b的地址
	fmt.Println("*c=", *c)           // 内存a的地址
	fmt.Println("&c=", &c)           // 内存c的地址(内存b地址的地址)
	fmt.Println("*&c=", *&c)         // 内存b的地址
	fmt.Println("**c=", **c)         // 1
	fmt.Println("***&*&c=", ***&*&c) // 1
	fmt.Println("d=", d)             // 1
}

func Ignore() (int, string) {
	return 10, "Q1mi"
}

// 指针交换
func swap(a, b *int) {
	fmt.Printf("指针a:%v, 指针b:%v\n", a, b)
	a, b = b, a
	fmt.Printf("指针a:%v, 指针b:%v\n", a, b)
}

type P struct {
	val int
}

func (p P) setValByValue(i int) {
	p.val = i
}

func (p *P) setValByPointer(i int) {
	p.val = i
}
